Three Haskell Cakeの実践としてpurescript-halogen-realworldを読む
Layer3
Layer2
Layer1
恐らく実装順序としては、
本当に純粋なロジックについてはLayer3から書ける
ただ、Effectが入ってきそうな処理に関しては、
まずLayer2でinterfaceを定義し、
最後にLayer1で具体的に外部サービスと接続する
という流れになると思う
Layer3: Logの型を定義する
code:Data/Log.purs(hs)
data LogReason = Debug | Info | Warn | Error
domain logicとして取り敢えず型を用意しておく
残りのロジックは
Layer2: Logの出力先に依存しないInterfaceを用意する
抽象度が高く、Effectの取り扱いの方針を決める実装になる
Logの実装は、「〇〇にLogを出力する」という抽象的なinterfaceをまず考える
出力先は、consoleだったり外部サービスだったりするし、テスト目的でfileに出すこともある
外部リソースとLayer2を接続する